package com.learning.Map;

import java.util.*;

//我的购物车
public class ShoppingCart {
    private static Map<Long,CartItem> cartItemMap = new HashMap<>();

    static {
        Goods goods1 = new Goods(1L,"Java从入门到精通",89.90);
        Goods goods2 = new Goods(2L,"Java高级",90.00);
        Goods goods3 = new Goods(3L,"Java网络爬虫",50.00);

        cartItemMap.put(goods1.getId(),new CartItem(goods1,1,89.90));
        cartItemMap.put(goods2.getId(),new CartItem(goods2,2,180.00));
        cartItemMap.put(goods3.getId(),new CartItem(goods3,4,200.00));
    }
    /**
     * 购物车功能
     * 1.将商品放入购物车
     * 2.从购物车把商品移除
     * 3.清空购物车
     * 4.显示购物车中所有商品
     * 5.计算购物车中商品总计
     */
    //将商品放入购物中
    public static void addToCart(Goods goods){
        if(!cartItemMap.containsKey(goods.getId())){
            cartItemMap.put(goods.getId(),new CartItem(goods,1,goods.getPrice()));
        }
        else{
            CartItem cartItem = cartItemMap.get(goods.getId());
            cartItem.setQuantity(cartItem.getQuantity() + 1);
        }
    }
    //从购物车中把商品移除
    public static boolean removeFromCart(long id){
        if(!cartItemMap.containsKey(id)){
            return false;
        }
        else{
            cartItemMap.remove(id);
            return true;
        }
    }

    //3. 清空购物车
    public static void clearCart(){
        cartItemMap.clear();
    }

    //4.显示购物车中的所有商品
    public static List<CartItem> getCartItems(){
        return new ArrayList<>(cartItemMap.values());
    }


    //5. 计算购物车商品总计
    public static double getTotalPrice(){
        double totalPrice = 0;
        if(!cartItemMap.isEmpty()){
            for(Map.Entry<Long,CartItem> entry : cartItemMap.entrySet()){
                CartItem cartItem = entry.getValue();
                totalPrice += cartItem.getSubTotal();
            }
        }
        return totalPrice;
    }

    //6.修改购买数量
    public static boolean modifyQuantity(long id,int qty){
        if(cartItemMap.containsKey(id)){
            CartItem cartItem = cartItemMap.get(id);
            cartItem.setQuantity(qty);
            return true;
        }
        return false;
    }

}
